% !TEX root = ../latex-faq-cn.tex

\section{字体篇}

\faq{\LaTeX{} 字体是如何处理的}{NFSS}

\LaTeX{2e} 目前的字体机制称为“新字体选择机制”（New Font Selection
Scheme，NFSS）。它将文本字体分为五个互不干扰的属性（数学字体初学者不必过早了解）：
\begin{itemize}
  \item 编码（encoding）。这个属性初学者暂时不必了解。在 （pdf）\LaTeX{} 和 up\LaTeX 中，默认的西文编码称为OT1；在 \XeLaTeX 中，默认的编码称为 EU2，就是 Unicode。
  \item 字族（family）。一套成风格的字型的统称，如 cmr、ptm（times）等。\LaTeX2e{} 预先定义了三个切换字族的命令：|rmfamily|（衬线体）、|sffamily|（无衬线体）、|ttfamily|（等宽体）。
  \item 系列（series）。在一般的字体中一般表示字重（weight）。如粗体命令为 |bfseries|，正常粗细为 |mdseries|。
  \item 字形（shape）。在同一字族、同一系列下的风格差异，如斜体 |slshape|、意大利斜体 |itshape|、正体 |upshape|、小型大写 |scshape|。
  \item 字号（size）。以上四种变化是字型（typeface）的变化，而这是同一字型下不同大小的变化。\LaTeX2e{} 提供了成套的字号命令，如 |normalsize|、|small|、|scriptsize| 等。
\end{itemize}

中文字体的方面，不同的中文解决方案的处理也有不同，这里就不介绍了。


\faq{获取位图字体}{get-bitmap-fonts}


\faq{PDF 格式图片插入过程中的字形缺失}{lack-font-when-insert-pdf-figure}


\faq{为数学排版选择 Type 1 字体}{choose-type-1-fonts-for-math-typesetting}



\faq{Type 1字体如何安装配置}{set-up-type-1-fonts}

一些Type1字体包提供了相应的调用命令，详情请参考它们的文档。
TODO：我不清楚这块内容，只找到了参考文献，还请他人来完善这个问题。
\begin{reference}
  \item Philipp Lehman. The Font Installation Guide.（\cs{texdoc fontinstallationguid}）
\end{reference}


\faq{切换到 T1 时字体变得模糊}{change-to-type-1-font-blurred}


\faq{由于 Ghostscript 太旧造成字体模糊}{old-Ghostscript-font-blurred}


\faq{如何查看本机 \LaTeX{} 已找到的字体？}{local-fonts-list}

按字体族名（font family name）输出本机 \LaTeX{} 已找到的字体：
\begin{shcode}
 fc-list -f '%{family}\n' :lang=zh | sort > fontfamilylist.txt
\end{shcode}

按字体文件名（font file name）输出本机 \LaTeX{} 已找到的字体：
输出本机LaTeX能找到的字体（font file name）：
\begin{shcode}
 fc-list -f '%{file}\n' :lang=zh | sort > fontfilelist.txt
\end{shcode}

以上指定了|:lang=zh|过滤器只输出中文字体，可以去掉这一部分输出所有字体，或指定
lang为其他语言。


\faq{如何设置文档默认字体？}{set-default-local-fonts}

\TeX{} 引擎多使用字体族名或字体文件名来调用字体，不同 \TeX{} 引擎调用方式有差别。
在可行的情况下推荐使用字体族名进行字体设定，以防止同一字体因文件名有差异造成通用
方面的问题。

\XeLaTeX{} 和 \LuaLaTeX{} 中，可以使用\pkg{fontspec}来简单设置默认字体，它支持
TrueType及OpenType字体。
\begin{texlist}
% fontspec宏包中对西文默认衬线字体、无衬线字体及等宽字体的设定
\setmainfont{Libertinus Serif}
\setsansfont{TeX Gyre Heros}
\setmonofont{Libertinus Mono}
\end{texlist}

\pkg{ctex}中的子包\pkg{xecjk}构建于\pkg{fontspec}之上，提供了相应的中文字体设置命
令。

\pkg{ctex}默认根据用户不同的操作系统环境来选择对应的fontset文件来设定默认中文字体，
你也可以自定义fontset文件，详情请|texdoc ctex|。

如果您想手动指定默认字体的话，可以使用\pkg{ctex}提供的命令：
\begin{texlist}
% ctex宏包对CJK 默认衬线字体、无衬线字体及等宽字体的设定
% 文档默认字体为思源宋体，默认字体|\itshape|时使用方正新楷体替代。
\setCJKmainfont [ItalicFont = FZNewKai-Z03S]{Source Han Serif CN}
% 普通无衬线字体为思源黑体的Normal字重，加粗时使用Medium字重。
\setCJKsansfont [BoldFont=Source Han Sans CN Medium]{Source Han Sans CN Normal}
% 中文等宽字体使用方正仿宋体。
\setCJKmonofont {FZFangSong-Z02S}
\end{texlist}

TODO：math mode的字体调用复杂多样，暂不赘述。


\faq{如何调用已被 \TeX{} 找到但仍未被配置的字体？}{set-local-fonts}

\pkg{fontspec}为 \XeLaTeX{} 和 \LuaLaTeX{} 提供了方便的字体调用命令 |fontspec| ，
详情请|texdoc fontspec|。
\begin{texlist}
  % \fontspec[<font features>]{<font name>} % 直接指定字体
  % \newfontfamily<cmd>[<font features>]{<font name>} % 提供调用字体的命令<cmd>，
  % 方便多次调用。
  \newfontfamily\fontCMUtv{CMU Typewriter Text Variable Width}

  I am the default font. \\
  \fontspec{texgyreschola-regular.otf} Haha, I am texgyreschola. \\
  \fontCMUtv and now CMU Typewriter Text Variable Width is me.
\end{texlist}

\pkg{ctex}宏包构建于\pkg{fontspec}之上，提供了相应的CJK字体设定命令，并为 CJK 字体
加入了一些特性和功能）。
\begin{texlist}

  % \CJKfontspec{<font name>}[<font features>] % 直接指定字体
  % \newCJKfontfamily<cmd>{<font name>}[<font features>] 提供调用字体族的命令。

  \newCJKfontfamily\gothic{IPAexGothic} % 定义调用 IPAexGothic 字体的命令为 \gophic
  \gothic 日本語
  \songti 哇哈哈，我又回到了中文宋体。
\end{texlist}

\begin{reference}
  \item fontspec及ctex文档。
  \item 刘海洋 and 李阿玲. \LaTeX{} 如何混合排版中文与日文？（此链接还额外包
    含\pTeX{} 字体设定的一些内容）.
    \url{https://www.zhihu.com/question/68393040/answer/263348121}
\end{reference}


\faq{如何使用斜体}{how-to-use-italic-or-slanted-fonts}

斜体一般是西文字体用的，在中文中不用斜体。在实际使用中，对采用何种中文字体与西文意
大利体（italic）搭配并不存在统一或权威意见，但较多数人使用楷体与意大利体搭配。
在使用\pkg{ctex}包的情况下，可通过设定ItalicFonts选项选择你所想与意大利体搭配的
中文字体。例：
\begin{texlist}
  % FZNewKai-Z03S为方正新楷体的字体族（font family name）名，Source Han Serif CN
  % 为思源宋体的Region-specific Subset OTF版本。具体使用请根据本机环境定义。
  \setCJKmainfont [ItalicFont = FZNewKai-Z03S]{Source Han Serif CN}
\end{texlist}

斜体这个名字比较误导，因为它对应英文的两个名字：倾斜体（slanted，指字形风格大致相同但是倾斜）和意大利体（italic，指字形设计为接近手写的形态，同时也就出现了倾斜）。

两种情况下分别有 |slshape| 和 |itshape| 两个命令，使用例如 |\slshape slanted| 及 |\itshape italic|；
也有把斜体内容作为参数的命令（推荐使用这种），如 \textsl{slanted} 及 \textit{italic}。


%TODO：为了演示例子，想添加 amsmath bm amsbsy 等宏包，但都添加的话会出错，例如 \alpha 会变成方框等
%      演示代码那个有什么其他的环境吗？或许可以参考 刘海洋 那本书里面的演示代码，左边代码，右边结果
\faq{如何使用粗体}{how-to-use-bold-fonts}

\begin{itemize}
  \item |mathbf|：会将数学模式取消再来取用字型，因此它加粗的不是数学符号，而是公式里的一般文字。|mathbf| 只能在公式内部使用： 
  \begin{texlist}
  \documentclass{article}
  \begin{document}
  $\mathbf{equation: f(x,y) = \alpha x^2 + \beta y^2}$
  \end{document}
  \end{texlist}
%  效果如下：$ \mathbf{equation: f(x,y) =} \symbf{\alpha} \mathbf{x^2 +} \symbf{\beta} \mathbf{y^2} $
  \item |boldmath|：|boldmath| 可以将整套数学字体切换为粗体版本，这个命令只能在公式外使用：
  \begin{texlist}
  \documentclass{article}
  \begin{document}
  \boldmath{$f(x,y) = \alpha x^2 + \beta y^2$}
  \end{document}
  \end{texlist}
%  效果如下：
%  \boldmath{$f(x,y) = \alpha x^2 + \beta y^2$}
  \item |boldsymbol|：\pkg{amsmath} 提供了一个 |boldsymbol| 命令（由调用的 \pkg{amsbsy} 宏包提供），用于打破 |boldmath| 的限制，在公式内部将一部分符号切换为粗体：
  \begin{texlist}
  \documentclass{article}
  \usepackage{amsbsy} % 或者直接调用常用宏包 amsmath
  \begin{document}
  \[ f(x,y) = \boldsymbol{\alpha x^2 + \beta y^2} \]
  \end{document}
  \end{texlist}
%  效果如下：
%  \[ f(x,y) = \boldsymbol{\alpha x^2 + \beta y^2} \]
  \item |bm|：
  \begin{texlist}
  \documentclass{article}
  \usepackage{bm}
  \begin{document}
  $\sum x_i y_i$,
  $\bm{\sum x_i y_i}$,
  ${\bm \sum}{\bm x_i}{\bm y_i}$.
  \end{document}
  \end{texlist}
%  效果如下：
  %TODO： bm 宏包和其他的 amsbsy 有冲突
%  \[ \sum x_i y_i,
%  \bm{\sum x_i y_i},
%  {\bm \sum}{\bm x_i}{\bm y_i} \]
  \item |pmb|：需使用 \pkg{amsmath} 宏包。
  \item |\textbf|：文本加粗
  \begin{texlist}
  \documentclass{article}
  \begin{document}
  \textbf{equation: $f(x,y)=\alpha x^2+\beta y^2$}
  \end{document}
  \end{texlist}
%  效果如下：
%  \textbf{equation: $f(x,y)=\alpha x^2+\beta y^2$}
  \item |bfseries|：|bfseries| 影响之后所有的字符，如果想让它在局部生效，需使用花括号分组：
  \begin{texlist}
  \documentclass{article}
  \begin{document}
  {\bfseries equation: $f(x,y) = \alpha x^2 + \beta y^2$}\\
  equation: $f(x,y) = \alpha x^2 + \beta y^2$.\\
  \bfseries equation: $f(x,y) = \alpha x^2 + \beta y^2$\\
  equation: $f(x,y) = \alpha x^2 + \beta y^2$.\\
  \end{document}
  \end{texlist}
%  效果如下：
%  {\bfseries equation: $f(x,y) = \alpha x^2 + \beta y^2$}\\
%  equation: $f(x,y) = \alpha x^2 + \beta y^2$.\\
%  \bfseries equation: $f(x,y) = \alpha x^2 + \beta y^2$\\
%  equation: $f(x,y) = \alpha x^2 + \beta y^2$.\\
\end{itemize}

\begin{reference}
  \item Ishort-zh-cn
  \item LaTeX入门，刘海洋
  \item \url{http://blog.sina.com.cn/s/blog_5e16f1770100nqwx.html}
\end{reference}



\faq{如何通过字体文件名来调用未安装本机字体？}{call-local-fonts-by-chinese-name}
（TODO：不明白这个问题的意思。）


\faq{字体大小经常出现警告，该引用什么宏包解决？}{how-to-solve-warnnings-of-fonts-size}


\faq{有些特殊文字怎么加入 \LaTeX{} 文档，为什么 \backslash symbol\{"FF0E\} 编译后为空白}{how-to-add-special-symbol}

\LaTeX{} 提供了 |symbol| 命令，可以直接借助于字符编码插入字符，参考本书\faqref{how-to-find-symbols}。

|\symbol{"FF0E}| 编译后为空白是因你所使用的当前字体不包含这一字符，请指定包含这
一字符的字体来显示。
\begin{texlist}
\newCJKfontfamily\cjksans{Noto Sans CJK SC} 
\cjksans \symbol{"FF0E} 
\end{texlist}


\faq{如何查看字体和行间距，然后怎样修改}{how-to-check-and-modify-fonts-skip}


%TODO：这里为了演示表格，需要添加 tabularx 和 diagbox 两个宏包
\faq{字体相对大小指令}{some-relative-font-size}

|\small| 等命令对应的字体大小与文章 |documentlcass| 中指定的字体有关，对应
10, 11, 12 pt 三种全局字体大小的情况如下表所示：
\begin{center}
\begin{tabular}{|c|r|r|r|}
\hline 
\diagbox{指令}{字体大小}{全局字体设定} & 10 pt & 11 pt & 12 pt \\ 
\hline 
|\tiny| & 5 pt & 6 pt & 6 pt \\ 
\hline 
|\scriptsize| & 7 pt & 8 pt & 8 pt \\ 
\hline 
|\footnotesize| & 8 pt & 9 pt & 10 pt \\ 
\hline 
|\small| & 9 pt & 10 pt & 10.95 pt \\ 
\hline 
|\normalsize| & 10 pt & 10.95 pt & 12 pt \\ 
\hline 
|\large| & 12 pt & 12 pt & 14.4 pt \\ 
\hline 
|\Large| & 14.4 pt & 14.4 pt & 17.28 pt \\ 
\hline 
|\LARGE| & 17.28 pt & 17.28 pt & 20.74 pt \\ 
\hline 
|\huge| & 20.74 pt & 20.74 pt & 24.88 pt \\ 
\hline 
|\Huge| & 24.88 pt & 24.88 pt & 24.88 pt \\ 
\hline 
\end{tabular} 
\end{center}


\faq{在 \LaTeX{} 公式中如何将某一个字母或者希腊符号设置成某一个字体？}{how-to-set-up-some-character-to-special-font}

%TODO：这里使用了 verb 环境就会出错
%\faq{怎样在一篇文档中使用多种字体？如何自定义字体大小？（不使用已经定义的 |\huge|、|\Huge|、|\large| 等）}{how-to-use-multiply-fonts-in-one-document}


\faq{如何使用 Font Awesome 提供的免费字体图标？ }{how-to-using-fontawesome-in-latex}
  直接应用 \pkg{fontawesome} 宏包就可以了。

%TODO：这里使用了 verb 环境就会出错，好像是因为verb ||的问题不被pdf bookmark识别。
%\faq{\LaTeX{} 中，\pkg{xecjk} 提供了汉字分区设置 |\xeCJKDeclareSubCJKBlock|，英文有类似操作吗？}{similar-command-in-english-as-xeCJKDeclareSubCJKBlock}


\faq{word 的字体和 \LaTeX{} 大小如何对应呢？}{what-is-the-relation-of-fonts-size-in-word-and-in-latex}

\pkg{ctex} 提供了 |zihao| 命令与word 常用的字号相对应，详情请运行命令|texdoc ctex|。
\begin{reference}
  \item 刘海洋 and 李阿玲. \LaTeX{} 如何混合排版中文与日文？（此链接还包含
    \pTeX{} 设定的一些内容）.
    \url{https://www.zhihu.com/question/68393040/answer/263348121}
\end{reference}


\faq{LaTeX 中如何设置定理环境中的字体？}{how-to-set-up-fonts-in-theorem-  
environment}


\faq{有没有什么字符比较全的字体包推荐？}{fonts-contains-many-character}


\faq{\pdfLaTeX{} 如何使用 truetype 西文字体？}{using-truetype-fonts-in-pdflatex}


\faq{在latex公式中如何将某一个字母或者希腊符号设置成某一个字体？}{}


